home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Steal This CD
/
steal_this_cd.iso
/
Chapter 07 - Where the Hackers Are
/
virc200.exe
/
{app}
/
changes.txt
< prev
next >
Wrap
Text File
|
2004-01-11
|
83KB
|
1,553 lines
Changes since ViRC 2.0 RC5:
--- Additions ---
* You can now select all text in the input box with Ctrl+A.
* The script editor's event properties page now has a button
to select from some common event masks. Click it to see a
popup menu of the different event templates, then fill in
the blanks to create a mask for your event. The templates
are read from the file "eventmasks.ini" in your script path.
* You can ignore or unignore users from the nick list popup.
* New alias: /squery <service> <message>
* New function: $IsIgnoringNick(nick)
* The tab bar has been moved to a binary plugin, vp_tabbar.bpl.
This will allow the tab bar to be replaced in the future, but
some of the tab bar configuration settings have been disabled
in this version. The tab bar configuration will be working
again soon, in a different form. Please be patient.
* A mouse gestures plugin (beta) is now included,
vp_gestures.bpl. If you chose to install it but now want to
uninstall it, either delete the file or move it to another
folder.
--- Changed features ---
* <OnDCCFinished> events now receive an error number of -1 and
a message of "Cancelled remotely" when the remote end closes
any DCC chat, or when the remote end closes a DCC file
transfer that hasn't yet completed.
* New events that you create in the script editor now start
out as "after" events.
* /wall only sends to 9 nicks at once.
* VSInterp OLE Automation updates:
- External apps can now pass interface pointers to OVS
dispatch objects. The interface will be assigned an object
handle for the duration of the method call, then unmapped.
- The GetInterface() function now returns the actual IDispatch
interface for mapped OLE interfaces, instead of an OVS
wrapper.
- OVS objects can now be passed to OLE Automation methods.
A wrapper will be created automatically, just as with
GetInterface().
* The active nicks popup and hyperlink popups are now
initialized in an OnStart event instead of in virc.lib's
footer. This means you can merge items into the nick list
popup from an add-on script, and they will appear when you
right-click an active nick in the output pane (after
restarting ViRC).
--- Bug fixes ---
* Fixed a wildcard bug where "v% *" wouldn't match "v foo".
(The bug occurred when % matched an empty string and was
followed by a space in the pattern.)
* The hyperlink popup appears for URLs in the status window.
* URLs surrounded by certain attribute codes are parsed
correctly.
* Popup menu items for active nicks (and active servers, etc.)
now work correctly in the status window. Note that channel-
specific items like Op and Kick won't work as expected since
there's no channel, even though they aren't grayed out.
* The ident server now returns the ports in the correct order.
* SetEventLine now updates $nick, $user, and $host for the
following events.
* -before and -after events run in the correct order (highest
to lowest priority).
* $var++ and $var-- correctly update the variable on all
servers.
* Wallpaper and window backgrounds are reloaded when you click
OK in the configuration window.
* VSInterp: Fixed an obscure issue involving script access to
methods and properties of COM objects (FuncDesc was released
twice).
* DCC Resume works when the sender is using mIRC 6.1+.
* Fixed a scrolling bug for output windows with less than a
whole page to show.
* Fixed a server list saving bug.
Changes since ViRC 2.0 RC4:
--- Additions ---
* Toolbar items can now have hotkeys. Put a clause like
"hotkey Ctrl+X" after the item name in the toolbar block.
* The timestamp and logging toggle buttons are now bound to
F5 and F6, respectively.
* Channels and query windows are now "deferred" until you stop
typing for a second. They won't appear or receive focus until
you stop; but they can still be accessed by scripts, and they
show up on the window tab bar. This feature can be controlled
with two new options on the initial setup page: "Don't pop up
windows while I'm typing" and "Wait at least ____ ms after a
keypress".
The Query command will allow the new window to be deferred
if you specify the -defer flag: /query -defer Mr2001
Otherwise, it will be shown immediately as before. TextOut and
TextOutBitmap always allow query windows to be deferred if they
have to be created to show the text.
* New option: "Horizontal window tabs when docked to side". This
prevents the buttons from rotating when the tab bar is docked
to the left or right.
* If "Alt+Number to switch windows" is enabled, the tab icons now
change to numbers when the Alt key is held down.
* Added support for Undernet's 338 numeric, which gives the real
user@host and IP address for users with the +x mode.
* New "Goto URL in new window" option on the hyperlink popup
menu. This uses Exec to start IE.
* New attribute code for fixed-width fonts: ASCII 17, Ctrl+F in
the command line, or \f in scripts. This is compatible with
Pirch's fixed width code. ViRC.lib now displays the server MOTD
in fixed-width so ASCII art will look right.
* New function: $IsHidden(<window>)
* New command: Activate <window>
* New named events:
<OnHiliteWindow*
fired whenever new text causes an inactive window's tab to
be highlighted. $0 is the window class (TServerForm,
TChannelForm, TQueryForm, or TDCCChatForm) and $1 is the
window's unique name.
<OnDestroyWindow*
the opposite of OnCreateWindow, fired just before a window
is destroyed. the parameters are the same as
OnCreateWindow: $0 is the class, $1 is the (possibly non-
unique) name, and $2 is the unique name for DCC chats.
--- Changed features ---
* ViRC.lib's 330 numeric event now takes the account name from $4
instead of $7.
* The Directory, Drive, and FileName properties are now available
(where appropriate) for TDirectoryListBox, TFileListBox, and
TDriveComboBox.
* Many new icons, thanks to Axel from Italy!
--- Bug fixes ---
* The "ban nick change" message is evaluated correctly.
* The keepalive timer in virc.lib no longer resets $idletime().
* The FlashWindowEx system call is now imported from user32.dll at
runtime, allowing ViRC to run on Win95 systems (where
FlashWindowEx doesn't exist).
* Nick list flags other than o/h/v are now applied correctly in
all cases.
* Old alias hotkeys are correctly unbound when rehashing.
* NLSetCustomOne parses the channel correctly, and works when
called from a non-channel window.
* The nick list selection no longer changes when the nick list
contents change.
* Fixed the hints for the "Show/hide status window" menu items.
* Fixed a DCC bug when the nick in a DCC ACCEPT or RESUME message
didn't exactly match your own nick. This bug caused problems when
resuming files sent by some XDCC bots.
* The character set of the main font and nick list font are now
saved correctly. Font description strings (such as returned by
$GetSetting()) now include "C#123" as the last parameter, where
123 is the Windows character set number, if the character set
has been changed from the default.
* Fixed an error appearing when using /rehash if the local script
has been unset.
* Table columns that have grown to fit wide text (e.g. long nicknames)
will now shrink to their previous size when the wide text has
scrolled off the end of the buffer.
* The output from /unignore is fixed.
* The window name is now correct in OnCreateWindow for DCC
whiteboards.
--- Translation changes ---
* Message library version 3.
* Added messages:
- Msg_Rpl_WhoisRealHost, for the 338 numeric event.
- Msg_Active_GotoLinkCaption, Msg_Active_CopyLinkCaption,
Msg_Active_LinkNewCaption, and Msg_Active_LinkNewHint, for the
hyperlink popup menu
Changes since ViRC 2.0rc3:
--- Additions ---
* ViRC.lib recognizes the 330 numeric, returned by /whois on some
networks if the user is logged into the network services.
* Tab completion now works in server, query, and DCC chat windows.
You can cycle backwards through the completions by pressing
Shift+Tab. You can also use completion for command and alias names
preceded by a slash: /ct<tab> changes to /CTCP. In channel
windows, nicknames will be highlighted as they're completed.
* New OVS classes: TDriveComboBox, TDirectoryListBox, TFileListBox,
TFilterComboBox.
* New extended With..EndWith syntax. First install a handler:
ExtendWith <handler_name> [<flagset>] = <command>
Then invoke it:
With > <handler_name> [<parameters>]
<block>
EndWith
The <command> will be called with <parameters>, and the content of
<block> will be available through a TStringList object, $__Block__.
<flagset> is a set (surrounded by square brackets) of these
possible values:
xwEvalParams - evaluate <parameters>
xwEvalBlock - evaluate each line of $__Block__ before invoking
the command
xwNewContext - run <command> in its own local variable namespace
instead of the same one where With..EndWith was used
If <flagset> is omitted, the default value is [xwEvalParams].
* OVS objects can be accessed through OLE Automation by using the
IVSSprout::GetInterface method (see vircole.txt). This allows other
applications and Language..EndLanguage blocks to control objects
created by scripts. For example:
Language VBScript
Set mainform = VisualIRC.GlobalInterpreter.GetInterface(0)
mainform.Caption = "This is a new main form caption"
EndLanguage
Please note: When one of your objects' methods is called through
OLE, the parameters will be quoted as list items. See vircole.txt
for more tips on writing classes that can be called through OLE.
* OLE Automation interfaces can be mapped as OVS objects. See
vircole.txt for full details. Quick notes:
- OLE interfaces can be mapped one of two ways. (1) Another
program, or your script in a Language block, can call
IVSSprout::MapInterface. (2) You can create a new COM object
with the $NewComObject() function, given its CLSID, as long as
the object supports IDispatch.
- The handle 1 is automatically mapped to an instance of
IVisualIRC, the same interface available to Language blocks as
"VisualIRC".
- If $obj is an OLE interface, $ClassOf($obj) returns "IDispatch"
and $ParentClassOf($obj) returns "IUnknown".
- Indexed properties can be used by surrounding the index(es) with
square brackets after the property name: $prop(1.Servers [4])
- All parameters to an OLE method, including parameters for an
indexed property, must be individually quoted as list items.
* You can now send DDE commands to ViRC by poking data as well as by
executing a macro (for compatibility with programs written for
other IRC clients). Use the topic 'command' and the item name
'IRC_Command'. See vircdde.txt for details.
* Increased $ovsversion to 9 because of the new OLE support.
* New 'Parse List' statement, just like 'Parse Extended' but it
cleans up the list first and strips quotes from the single items
($1 is the second item without quotes, $1- is the second item
and all following items including quotes). Example:
@l $list = "albert bill" charlie "dave evan"
Parse List $list
// displays: albert bill
MessageBox $0
// displays: charlie "dave evan"
MessageBox $1-
EndParse
* ViRC will create a temporary server entry when you connect to
a server that sends its capabilities in the 005 numeric. The
temporary entry will not be saved to disk by default. If you
want to keep it, you can open the server manager and move it
to a network.
* The OnCloseQuery event of forms can be used to prevent the form
from closing. Use '@L $CanClose = 0' in the event handler if
the form shouldn't be closed.
* TTrayIcon (e.g. $MapObject(!Main:TrayIcon)) has two more
properties: Flashing (Boolean) and FlashTime (Integer). When
Flashing is True, the tray icon will flash every FlashTime ms.
* New function: $IsAppActive() returns 1 if ViRC is the active
program.
* New command: FlashTaskbar [mode]. Mode can be "on" (or 1) to
highlight ViRC's taskbar button, "off" (or 0) to un-highlight
it, or "auto" to highlight it until ViRC becomes the active
program. ("off" may not work correctly due to Windows API bugs.)
* New ViRC.lib script settings to flash the taskbar and/or tray
icon when new messages arrive and ViRC is in the background.
* The "text windows" configuration page now contains a nick list
color/style editor.
* The nick list can now display your channel background image.
* ViRC.lib automatically sets up the smileys.vsc and sounds.vsc
add-ons for first-time users, as well as winamp.vsc if Winamp
is running when ViRC is started.
* TTreeView is now accessible from OVS (as well as TTreeNodes
and TTreeNode). Most properties and events are supported.
--- Changed features ---
* Nicklist flag colors are now saved in color scheme files.
* English messages from ViRC.lib and toolbars.vsc have been moved
into english.lib to facilitate translation. You can use
english.lib as a base for translating ViRC.lib's messages into
other languages.
* Relative path names can be used in embedded TextOut bitmaps
(\S@bmp:smile.bmp:alt text\S) and script link bitmaps
(\S@slbmp:smile.bmp:command:alt text\S).
* The channel list window is no longer modal. You can select
another window while the list is open, then switch back by
clicking the channel list's window tab.
* The error message displayed when you try to change your nick
while banned/gagged on a channel now shows the channel name.
* Some configuration pages have been re-arranged.
* Color names are now more friendly on the "text windows"
configuration.
* ViRC.lib now fires <OnCreateStatusWindow* events after creating
the status window, to allow other scripts to change the
appearance of the status window and its popup. $0 is the object
handle of the window itself (TMonkeyScroller) and $1 is the
popup menu (TPopupMenu).
* The script editor appears much more quickly when using the
'-editscript filename.vsc' command line option.
* The top-level code in a script (header/footer) can examine $2
to find out whether this is the user's first time running ViRC.
$2 will contain "firstrun" if so.
* As a precaution, the built-in script editor no longer allows
you to save the file if any code was lost during loading.
The warning message explains that you must edit the file with
a text editor.
--- Bug fixes ---
* Fixed the channel control's topic length indicator not updating.
* Updated to ThemeManager 1.9. Among other things, this fixes
sab0tage's channel control script causing errors when you close
ViRC after opening the channel control form.
* Text should now wrap correctly on multi-byte character systems.
* $ListSearchReplace() works correctly with items that contain
spaces.
* Menu item bitmaps appear correctly for toolbar dropdown menus,
the /wwho right-click menu, and menus creates with
TMenu.LoadFromMenuTree.
* $IdleTime() is no longer reset by server pings.
* The toolbar selection popup no longer appears when right-clicking
the drawing in a whiteboard window.
* Continuous backgrounds line up with the wallpaper when toolbars
are docked to the left side.
* TDCC transfers are correctly recognized as TDCC when the filename
includes a space.
* $URLEncode() and $URLDecode() now translate a space to %20 instead
of '+'.
* The "don't tell me about this version again" check box setting in
the update checker is saved correctly.
* The font change dialog boxes no longer show checkboxes for strike
out, underline, or color. The main font dialog box no longer lets
you change the font style to bold or italic (since channel text
always appear with regular style anyway).
* Script links now work in the status window.
--- Translation changes ---
* Message library version 2.
* Msg_BanNickChange can now use $$chanstr for the name of the
channel that prevents a nick change.
* Added messages: Msg_SS_flashtray and Msg_SS_flashtaskbar, the
captions of the script settings to flash the tray/taskbar when
a new message is received while ViRC is inactive.
Changes since ViRC 2.0rc2:
--- Additions ---
* /chatops and /globops aliases in virc.lib, for IRCops on DALnet
based servers.
* New command: Randomize - Re-seeds the $rand() function.
* You can now add more than one add-on script at a time.
* New function: $NickCase(text) - Returns text in uppercase, with
[\] changed to {|}. This is good for storing nicknames in an array.
* New functions: $SelectedNick(channel) and $SelectedNickList(channel).
* The toolbar popup menu now appears when you right-click ViRC's
background.
* New 'lock toolbars' on toolbar popup menus.
* The position of the nick list resizer is stored for channel windows.
* Stored window positions will be deleted after you haven't joined
the channel for two weeks. Imported window positions from rc2 will
be deleted after one week (unless you rejoin them before then).
* New commands: Delay [timername] interval command, MDelay [timername]
interval command, UnDelay timername. Equivalent to Timer, MTimer,
and UnTimer, except that the number of repeats is always 1.
* New colorful nicklist. Commands and functions: NLAddFlag, NLDelFlag,
NLPrec, NLNamesMark, NLColor, NLStyle, NLPrefix, NLSuffix, NLBitmap,
NLFlags/$NLFlags(), $NLFlagInfo(), $NLHasFlag(), NLChFlags,
$NLGetFlags(), NLSetCustomOne, NLSetCustomAll, $NLGetCustomOne(),
$NLGetCustomAll(), NLDelCustomOne, NLDelCustomAll, NLConfig,
$NLConfig().
* Nick list configuration options: "Enhanced nick list" and
"Show all prefixes".
* ViRC.lib will automatically add any new nick list flags when you
connect to servers that send a "PREFIX" option.
* New mappable forms: !ChannelList, !EditChatFile, !EventOptions,
!AutoUpdate, !ImportSettings, !KPalette, !MenuTreeOptions,
!PenWidth, !DCCResume, !XportServers, !SetupWizard, !Splash,
!Uninstall, !WWho
* $GetDCCInfo() can accept a DCC chat or whiteboard window name
instead of a DCC entry id: $GetDCCInfo(=Mr2001 remoteaddr)
* New OVS class: $new(TMessageDialog <message> <type> <buttons>)
type - mtWarning, mtError, mtInformation, mtConfirmation,
mtCustom
buttons - set of [mbYes,mbNo,mbOK,mbCancel,mbAbort,mbRetry,
mbIgnore,mbAll,mbNoToAll,mbYesToAll,mbHelp] (no spaces!)
To create a message dialog and show it later, use code like this:
@ $sure_dialog = $new(TMessageDialog Are you sure? mtConfirmation [mbYes,mbNo])
...
@l $result = $sure_dialog.ShowModal()
The return value of ShowModal() is the same as the return value
from $MessageDlg(). You can set the dialog's ModalResult property
to a nonzero value to close the dialog without user input
(e.g. from a timer).
--- Changed features ---
* You can select more than one file in the DCC send dialog box.
* $nicklist(), $oplist(), $peonlist(), etc. now quote the nicks as
list items, so nicks with \\ in them will work correctly. (They were
previously separated by spaces but not quoted. You can use
$ListJoin() to change them back.)
* $StrTrim() now removes leading spaces before the colon.
* Closing the channel list before it's finished searching will
send a 'LIST STOP' to the server (when server-side searching is
enabled).
* The number of repeats is now optional for /timer and /mtimer. If you
leave it out, it defaults to 0 (infinite repeats).
* Added COM, PIF, DOC, XLS, and SHS to the default "dangerous file
extensions" list.
* $listquote() now prefers to use angle brackets instead of quotes.
* DCC chat popups now receive the unique DCC window name as $C and $2.
--- Bug fixes ---
* smileys.vsc won't replace smileys that occur inside a word, like
"Fserve trigger:(!foo) Queue:(3 of 3)"
* Leaving the server selection box empty when you have no default
server won't cause problems.
* Alt+Number switching should work correctly with non-US keyboards.
ViRC now checks whether you are holding down Ctrl at the same time,
since AltGr is supposed to send left Ctrl + right Alt. On a US
keyboard, you should be able to use either Alt key to switch windows.
* AbortEvents won't display the raw server line.
* The master script browse button in configuration works relative to
the script path.
* Fixed an array bug - @ $x = y, where $x has previously been used as
an array, should work correctly.
* Min and Restore work as expected when 'minimize to tray' is enabled.
* A space is only copied to the clipboard for table columns when it's
after the beginning of the line.
* Duplicate nicks are no longer added to the notify list.
* After double clicking the tab bar to hide a window, the next highest
window will be activated.
* Fixed an EConvertError during auto-reconnection.
* Fixed an error when loading files into the script editor.
* Fixed "view log" popup menu item.
* Fixed a couple stability issues from RC2.
* Fixed IAL expiration.
* Fixed $upeval().
* Fixed changing events on objects that are mapped more than once.
* Fixed errors when opening the script editor when the script path is
not the current directory.
* The Undo/Copy/Paste popup menu is back for input panes.
* Most forms are now loaded as they are needed, reducing initial
memory usage and decreasing startup time.
* Built-in forms that haven't been loaded will be loaded when they
are mapped with $MapObject(), instead of returning -1.
* The 'GetMenuTreeList' method of TStrings lists user-defined
menu trees.
? Fixed script editor not saving to correct file if directory has been
changed.
* Channel control window: Halfops can change topic. Peons can read and
copy the topic even if they can't change it.
Changes since ViRC 2.0rc1:
--- Additions ---
* Event options to run before/after other events, use variables in
the activation mask, and more. New event definition syntax:
Event <name> [-before|-after] [-eval] [-exact] [-case] [-regexp] "<mask>"
<code>
EndEvent
-before: the event will run before the event's message is displayed
(either internally or by a priority-matching event). all matching
'before' events will be run in the opposite order they were added
(that is, newest first), unless one of them calls FallThrough,
which will skip all remaining 'before' events.
-after: just like -before, but runs after the message. the order is
still newest first. this shouldn't be combined with -before.
-eval: the mask will be evaluated when it is being matched against
a server line (caution: if you put a function call in the event
mask, the function will be called A LOT). use this to match your
current nick, for example, instead of the nick you had when the
event was defined.
-exact: the mask will have to match the entire server line. that is,
"% JOIN" will not match ":Mr2001 JOIN #virc" if -exact is used.
also, the event mask won't be evaluated when the event is set,
although it will still be evaluated at match time if -eval is used.
-case: the mask will be case-sensitive.
-regexp: the mask is a unix-style "regular expression" rather than
a $wildmatch() mask. any subexpressions enclosed in parentheses
will be available to the event handler in the $matches array:
the mask ":\w+ PRIVMSG (#\w+) :(.*)" will put the channel name in
$matches[1] and the message in $matches[2]. the mask will not be
evaluated when it is set, since some regexp syntax collides with
ViRC's attribute codes.
* New commands: 'SetEventLine <text>' and 'AbortEvents'. SetEventLine
lets an earlier event change the parameters that will be given to
later events. AbortEvents stops event processing after the current
event finishes. For example, to ignore all /msgs from Mr2001, and
change everything LuceNT says to uppercase:
Event PRIVMSG_test -before "% PRIVMSG"
if [$nick] == [Mr2001]
AbortEvents
else if [$nick] == [LuceNT]
SetEventLine $0 $1 $2 :$upper($strtrim($3-))
endif
EndEvent
* New function: $upeval(<text>) evaluates the text in the previous
local variable context, so a called alias can access its caller's
local variables. (This is used by @e+ and @e-.) For example:
Alias FOO
@l $secretnumber = 17
Bar
EndAlias
Alias BAR
MessageBox The secret number is $upeval($$secretnumber).
EndAlias
* New OVS event utilities (in virc.lib):
// add an event handler to an object. any existing handlers will
// still run, but this will replace an existing handler with the
// same ID (first_box).
@e+ $button.OnClick = first_box, MessageBox You clicked the button!
// add another, now both boxes will appear when you click it
@e+ $button.OnClick = second_box, MessageBox You clicked at $time()
// remove the first handler
@e- $button.OnClick = first_box
// list all handlers
foreach ($id,$code; $eventhandlers($button.OnClick))
MessageBox handler "$id" runs "$code"
endforeach
* The server list can now be mapped as !ServerList.
* CTCP SOUND support is now included as an add-on script, sounds.vsc.
* '@ ${foo} = bar', '-@ ${foo}', etc. are supported.
* https:// and irc:// URLs are highlighted.
* New function: $replace(<text> <from1> <to1> [<from2> <to2>...])
returns the text after replacing each "from" string with the
corresponding "to" string. All parameters must be quoted as list
items, and they are case sensitive. The replacement is done on a
single pass through <text>, so $replace(ABC A X X Z) will return
"XBC", not "ZBC". $replace(ABCD A foo ABC bar) will return "fooBCD",
not "barD", because the leftmost from/to pairs are replaced first.
* Inline graphics for text windows: \S@bmp:filename[:alt text]\S
If supplied, the alt text will be copied to the clipboard when the
graphic is selected. You can also make a graphical script link:
\S@slbmp:command:filename[:alt text]\S
<filename> can be either a FULL PATH to the bmp file, or a bitmap
handle returned by $bitmap(filename.bmp). ViRC will automatically
look in your image path if you use $bitmap(filename.bmp).
* Tables for text windows. These are basically like custom tab stops;
there are separate commands to create a table definition, select
an active table, and move to the next column within a line of text.
All the commands are used by outputting them to a text control, so
tables should be defined in <OnCreateWindow>, not <OnStart>.
define (or redefine) a table: \S@td:<name>:<col1>[:<col2>:...]\S
- Name must be a single word. A table only has to be defined
once, then it can be used in any window. Each <colN> sets
the width of a column; it can specify pixels ('50px'),
characters ('25ch'), or let ViRC choose a size ('?'). The
/f flag ('50px/f', '25ch/f') tells ViRC not to resize the
column, even if some text won't fit.
(re)define a wrappable table: \S@td/w:<name>:<col1>[:<col2>:...]\S
- Just like regular @td, but text shown with a wrappable table
is allowed to wrap to the next line.
select a table for one line: \S@uset:<name>\S
- This must appear at the beginning of the line. The named
table definition will be used for this line only.
select a table for several lines: \S@pusht:<name>\S
- The named table will be added to the top of the "table stack",
and it will be active until it is removed with @popt. Each
window has its own table stack.
display text with columns: \S@col\S<some text>
- Moves to the next table column before displaying the text.
The previous column may be resized if it wasn't defined with
/f and if the text that has already been displayed is wider
than the column's original size.
unselect a table: \S@popt\S
- Removes the most recently selected table from the stack.
unselect all tables: \S@popt/a\S
- Clears the table stack. When the stack is empty, the default
table (set with @setdeft) will be used.
set a default table: \S@setdeft:<name>\S
- Sets the named table as the default table, so it will be
active whenever the table stack is empty. ViRC.lib uses a
default table to line up nicks, so you should only change
the default table if you know exactly what you're doing.
* New function: $GetTimerServer(<timer name>) returns the ID of the
server that the timer is associated with, or -1 if not found.
* The script editor has buttons for event options and menu tree
merge options. If your script uses MergeMenu and you want the script
editor to recognize it, rename the source tree to the destination
tree's name followed by __MERGE (e.g., MT_MAINMENU__MERGE), then
move the MergeMenu line immediately after the last MenuItem for
the tree.
* ViRC will be drawn with themes under Windows XP.
* New included scripts: sounds.vsc (handles CTCP SOUND) and
smileys.vsc (shows graphical smileys).
* ViRC.exe now includes 48x48 icons.
* New exception handling for scripts. Now you can catch errors that
come up when working with files or OVS:
Try
@l $filename = $?="Enter a filename"
$stringlist.LoadFromFile $filename
Except
if [$ExceptClass] == [EInOutError]
MessageBox I/O error prevented me from loading the file: $ExceptMsg
else
MessageBox Unexpected exception: $ExceptClass was raised at $ExceptAddr ($ExceptMsg)
endif
EndTry
Use a 'finally' part to run some code whether an exception was
raised or not. You can omit the 'finally' or 'except' part, or both
(to ignore all exceptions).
@l $cur_dir = $GetCurrentDir()
Try
ChDir $getpath()
MkDir $?="Enter a new directory name"
Finally
ChDir $cur_dir
Except
MessageBox Couldn't make new directory: $ExceptMsg
EndTry
In an 'except' part, you can reraise the exception, so it
will be caught by an outer Try..EndTry statement, with the Raise
statement. Or you can raise your own exceptions at any time:
Alias OUTER
// ignore any exception that occurs in Inner1
Try
Inner1
EndTry
EndAlias
Alias INNER1
Try
Inner2
Except
// display "Inner1 caught Exception - an exception from Inner2"
MessageBox Inner1 caught $ExceptClass - $ExceptMsg
// re-raise the exception for Outer to catch
Raise
EndTry
EndAlias
Alias INNER2
Raise an exception from Inner2
EndAlias
* A scripted popup menu now appears when right-clicking a web hyperlink,
allowing you to either go to the URL or copy it to the clipboard. This
makes use of TMS's new OnHyperlinkPopup event.
* New command: CacheBitmap <name> <hbitmap>. You can replace ViRC's
built-in TextOut images by using a 'name' of _join.bmp, _part.bmp, etc.
'hbitmap' is the value returned by $bitmap(filename.bmp).
* New event: <OnCacheBitmaps>, called at startup and after
FlushBitmapCache. This is a good place to replace built-in bitmaps.
* ViRC.lib will automatically replace the built-in join/quit/etc bitmaps
with any corresponding files it finds in your image path:
_join.bmp, _part.bmp, _joinign.bmp, _partign.bmp,
_quit.bmp, _nick.bmp, _mode.bmp, _topic.bmp
If you release a color scheme for 2.0rc2 with new bitmaps, you can
simply include these files in an image folder, and reference it in your
scheme file. ViRC.lib will notice when you change your image path and
automatically recache the bitmaps.+
* ViRC.lib notices when you change your script path or filenames in client
setup, and automatically rehashes.
--- Changed features ---
* File dialog boxes ($opendialog(), etc.) now start in the current
directory.
* Built-in menu trees in the script editor are now merged by default.
This means you can add items to a menu simply by, well, adding them.
* The script editor shows a warning when you omit an event mask.
* RightAlt+Num no longer switches windows, since right Alt is used for
typing symbols on non-U.S. keyboards. Use left Alt instead.
* The server list and server import/export forms are now resizable, and
the tree views won't expand automatically if there are more than 15
items to show.
* Opening server windows is faster.
* String expressions can now use nested square brackets:
if [$array[$key]] == [foo]
...
endif
@l $x = []
if [$x] == [[]]
MessageBox Naturally!
endif
--- Bug fixes ---
* Fixed an array parsing bug.
* MergeMenu now copies hints correctly.
* Making the server hostname edit box empty, or calling /server with no
parameters, will now connect to the previous server instead of giving
an error.
* The userlist loads correctly from INI files.
* $listquote() now escapes strings containing tabs and CR/LF.
* The script editor doesn't prompt to save when you view a <DoubleClick>
menu item without making any changes.
* The script editor won't write a MenuTree block if the only item is
<DoubleClick>.
* $GetWindowID() works for all window types.
* <OnDCCFinished> is fired when closing a DCC chat window.
* '^Msg =nick text' correctly hides any text displayed by
<OnMyQueryText>.
* The DCC progress bad should appear correctly for large files.
* !Application's Active property is now readable.
* UltimateIRCD's "channel admin" flag (*nick) won't confuse ViRC's
nick list.
Changes since ViRC 2.0pre11:
--- Additions ---
* -@L command to delete local variables and local array entries. Local
variables and arrays are still deleted automatically when the routine
finishes, so this is mainly useful for removing values from local
arrays.
* You can now switch between the first ten windows by pressing Alt+1
through Alt+0. Alt+1 jumps to the first window on the tab bar, Alt+2
jumps to the second, etc.
* New aliases in virc.lib: /onall <command> to run a command on all
servers, /aasay <text> and /aame <text> to do /asay and /ame on all
servers.
* The script editor now supports custom magic in menus.
* Color and font schemes can now be saved and loaded on the
"Text windows" configuration tab. If you download schemes, save them
in your image path.
Schemes can also include image and sound folders. To distribute your
images and sounds as part of a scheme, open the scheme file with a
text editor. Add a section at the bottom:
[Paths]
ImagePath=somename-images
SoundPath=somename-sounds
(You don't have to include both an image path and a sound path.
Replace 'somename' with the name of your scheme.)
Then put the scheme file (somename.colors), along with image and
sound folders (somename-images and somename-sounds), in a ZIP
archive to upload it.
* New $ParamList() function to return a list of parameters passed on
ViRC.exe's command line.
* Command-line support for loading scripts (-loadscript filename.vsc),
editing scripts (-editscript filename.vsc), importing server lists
(-importservers filename.vsl), opening connections from a file
(-chat filename.chat), editing connection files (-editchat
filename.chat), and deleting settings (-uninstall).
* ViRC now has an installer to create icons and register file types.
The /irchyperlink alias will be called when an irc:// URL is
activated from Explorer.
* You can now choose to save to an INI file from the setup wizard.
* ViRC's TApplication object can now be mapped as !Application.
Useful properties: Active (boolean), ExeName (string),
Handle (HWND), HintColor (color), HintHidePause (integer),
HintPause (integer), HintShortPause (integer), ShowHint (boolean),
Title (string).
* New "codeedit" script control type. A syntax-highlighting script
code editor will appear. $getsetting() returns a list of lines
in order.
* New "perform on connect" script setting for networks and servers.
* Inflated windows stay inflated when resizing the main ViRC window.
Clicking the maximize button of an inflated window returns it to
the size it had before it was inflated.
* New default colors and built-in bitmaps.
* Special cursors for hyperlinks and script links.
--- Changed features ---
* New-style arrays ($array[$key]) have been optimized and are now as
fast as old-style arrays. Adding or removing values may cause the
order of items in $array to change. Old-style arrays ($array.$key,
or any variable with a . in the name) are now deprecated and should
no longer be used in new code, since a future version will not
support them.
* The incorrect syntax '-@ $foo $bar' no longer deletes $foo.
* Server list files (.vsl) can now contain comment lines starting
with //.
* The script log now shows function results.
* The setup wizard has been improved.
* Nonprintable characters and backslashes are no longer allowed in
variable names.
* Credits sequence changed.
--- Bug fixes ---
* Default paths are used correctly in the configuration window.
* No more I/O error when closing a reverse DCC send that is waiting
for a response from the receiver.
* The script editor appears correctly on systems with large fonts.
* Fixed virc.lib's DCC auto-accept settings.
* Fixed winamp.vsc bug causing crashes with certain song titles.
* Calling TextOut in some situations used to create a query window
called "$C"; now it is redirected to the server window.
* No more 64 KB limit in INI files.
* Minor bug fixes in the text scroller.
* Custom magic works on the main menu.
* Unused menu entries are correctly deleted; this solves a bug with
replacing menus containing custom magic.
* Hyperlinks are now marked more reliably.
Changes since ViRC 2.0pre10:
--- Additions ---
* User-defined classes can now use <AutoGet> and <AutoSet> as generic
property handlers, which will be called if you try to read or write an
undefined property.
* New client setup page for default download, upload, sound, image,
log, and script paths. Please note that the download, upload, and
log paths default to your "My Documents" directory, not the ViRC
directory.
* Scripts now have a standard way to store and play sound files for
events: AddEventSound <name> "<category>" "<title>" [default <file>],
DelEventSound <name>, PlayEventSound <name>, $EventSoundList(),
$GetEventSound(<name>), $GetEventSoundFile(<name>),
SetEventSoundFile <name> <file>, $IsEventSoundSet(<name>). Items
added with AddEventSound appear on the event sounds page in client
setup. PlayEventSound can also be called as a function, returning 1
if the sound was successfully played.
* New command to play sound files: PlaySoundFile <file>. This can also
be called as a function, returning 1 if the sound was successfully
played.
* InternalCall now works for many event types other than TNotifyEvent,
so you can hook into ViRC's events such as OnClose and still use the
default handling. Any parameter values for the event will be taken
from variables (such as $Action for OnClose), and any output
parameters will be written back to the variables.
* New command to run an alias in the current local variable context:
Chain <alias> [parameters]. All the local variables from the current
routine will be passed to the alias, and any changes made by the
alias will be visible to the current routine. This is useful for
chaining OVS event handlers:
@l $old_handler = $prop($obj.OnKeyDown)
@p $obj.OnKeyDown = _NEW_KEYDOWN $old_handler
...
Alias _NEW_KEYDOWN
...
Chain $1-
EndAlias
* New function $ShiftKeys(), returning a set of control keys that
are currently held down. Possible keys are lshift, rshift, lctrl,
rctrl, lalt, ralt, lstart, rstart, and context. 'shift' will be
included if either shift key is down; 'ctrl', 'alt', and 'start'
work similarly.
* ViRC.lib changes: Auto-connection will not be performed if you hold
Ctrl down while starting ViRC. Auto-joining will not be performed
if you hold Shift down while connecting to a server. New script
settings "Auto-accept DCC chat", "Auto-accept DCC send",
"Auto-resume DCC send", and "Dangerous file extensions". Logging menu
items on server/channel/query/chat windows.
* Buttons on the tab bar are now grouped by server and window type.
* New methods for TStrings: SaveToToolbar <name> <options>,
LoadFromToolbar <name>, SaveToToolbarItem <item> on <bar>,
LoadFromToolbarItem <item> on <bar>. LoadFromToolbar can be called
as a function ($stringlist.LoadFromToolbar(TB_WINAMP)) to return
the options needed to recreate the toolbar.
* winamp.vsc changes: Added commands /zz, /zj, /zk, /zl. Added Winamp
toolbar. See winamp.vsc for documentation and options.
* New function $ListUnique(<list>), returning the list with duplicate
items removed.
* Rewritten configuration code: New option "Save to INI file" in
configuration window. The server list is now stored in a file. New
commands: SetSetting [path] <key> = <value>, SaveConfig. SetSetting
can operate on either config settings or script settings (like
$GetSetting()), but any changes will be temporary unless SaveConfig
is called afterwards to write the settings to the registry/INI file.
* New command to add items to a menu tree:
MergeMenu <source> {before|after} <destination> <options>. Options
can be a space-separated list of 'addsep', 'noaddsep', 'clobber',
'noclobber', 'move', and 'nomove' (all three are turned on by
default). Addsep controls whether a separator is added between the
old items and the new items, clobber controls whether old items are
replaced by new items with the same name, and move controls whether
old items are rearranged to the order they appear in the source
menu.
* The script editor now prompts to save files that have been modified.
* OLE Automation support - see vircole.txt for details.
* ActiveScripting blocks now have access to the current window's
Automation object ("Current", implementing IServer, IChannel,
IQuery, IDCCChat, or IWhiteboard) as well as ViRC's object
("VisualIRC", implementing IVisualIRC).
* New custom magic types for menu definitions, so items can be
enabled or disabled at runtime. Instead of a number 0..3, you can
also use '$varname' (so the item is enabled when the variable is
nonzero) or '%funcname' (calls the function with <windowname> or
<nicks> <windowname>, item is enabled when the result is nonzero).
These forms can also be used with variable or function references:
!$varname enabled when variable is false
&$varname enabled when the menu's regular criteria is
met (e.g., you are opped) AND the variable
is true
|$varname enabled when the menu's regular criteria is
met OR the variable is true
&!$varname enabled when the menu's regular criteria is
met AND the variable is NOT true
!&$varname enabled when the menu's regular criteria is
NOT met AND the variable is true
!|!$varname enabled when the menu's regular criteria is
NOT met OR the variable is NOT true
and so on.
* New custom magic types for toolbar button definitions. Instead of a
state number 0..3, use state number 5 and include 'magic <token>'
before the state, where <token> is a variable or function reference
as described above. For example:
T_CHANCTL magic $enablechanctl 0 "tbchanctl.bmp" | Channel control
* New command UpdateMainMenu, to apply magic to the main menu and
toolbar items. (Magic will only be applied when the command is
called.) UpdateMainToolbar is a synonym.
* New function $isobject(<value>) to determine whether the value is a
valid object handle. New function $proplist(<object>) to list
properties.
* You can now use the -nosplash command line parameter to disable the
splash screen.
* New events: <OnMinimizeToTray> and <OnRestoreFromTray>. ViRC.lib
uses these to display a private message count while minimized.
* The help menu now shows DOC files.
--- Changed features ---
* ViRC will not try to reconnect if you use /server to connect to a
hostname that can't be resolved, but it will try to reconnect if it
encounters an unresolvable hostname during reconnection.
* The ident socket is only bound while ViRC is waiting for a server
to connect to it (unless "Answer for other programs" is enabled).
Ident should now work correctly with multiple instances of ViRC
running.
* $GetPath() now accepts an argument: 'download', 'upload', 'log',
'script', 'sound', 'image', or 'virc'. $GetPath() with no argument
is the same as $GetPath(virc).
* If a script file can't be found in the specified location, but it
can be found in ViRC's directory, ViRC will show a message but
won't automatically load the scripts from its directory unless you
press OK in the configuration window that appears.
* The default personal script filename for a user profile is now
local-<profile>.lib. (Create new user profiles by making shortcuts
to 'ViRC.exe -user <profilename>'.)
* Magic modes 1 and 2 for MT_TRAYPOPUP items now cause the items to be
enabled (or disabled, respectively) when ViRC is minimized.
--- Bug fixes ---
* $([foo] == [bar]) was slightly broken by the new array syntax.
* Small bug with matching server entries fixed.
* $GetMenuHint() and SetMenuHint are now case-insensitive.
* Italic text is displayed properly with non-TrueType fonts.
* Toolbars are repositioned correctly after reloading the script.
* Fixed closing a server window while a $getaddress() or DNS lookup was
pending.
* Toolbar buttons with mode 1 (enabled when opped) are enabled when you
join a channel and receive ops automatically.
* Random/sequential reconnection option is stored correctly.
* "Cancel reconnect" button appears in the correct place.
* ViRC minimizes to the tray correctly when the context menu for the
taskbar icon is used.
* Setting a timer for a command that uses the built-in channel tracking
(e.g., /timer 5 1 say hello) works correctly.
* Redefining a toolbar to appear on fewer window types will correctly
remove it from the old windows.
* Aborting DCCs now closes the file reliably.
* The notify list is emptied when disconnecting from the server.
Changes since ViRC 2.0pre9:
--- Additions ---
* Visible controls now have the Parent property available. This could be
used to move built-in controls into a group box or tab sheet.
* TListBox, TComboBox, and TListView now have an ItemText property. For
TListBox and TComboBox it's equivalent to the ItemIndex'th element of
the Items list; for TListView it's equivalent to the Caption property
of the Selected item.
* Server tab buttons now show "connecting" while waiting to connect.
* A gratuitous credits display is hidden in the about box.
* DCC entries now stay in the list after an error occurs.
* $GetDCCInfo() has two new fields: errnum and errmsg. 'state' can also
return 'error'.
* New '@e' command to set one-line event handlers. For example:
@e $form.OnMouseDown = MessageBox $Button
Now when you click the form, you will see a message saying "mbLeft" or
"mbRight" depending on which button you used. Note that the $Button is
evaluated when the event handler runs, not when it's set (as with @p).
This is equivalent to:
@p $form.OnMouseDown = Eval MessageBox $$Button
... but it makes more sense.
* New <default> event for server lines that aren't handled by anything
else. New "show unrecognized server numerics" script setting, to show
the entire unrecognized line.
* New associative array syntax:
@ $foo[key1] = value1
@ $foo[key2] = value2
@ $foo[key3] = value3
MessageBox $foo[key2]
-@ $foo[key1]
// when the key contains brackets, $, etc...
@l $temp = ]special characters[
@ $foo[$temp] = value4
foreach ($key, $value; $foo)
MessageBox key: $key, value: $value
endforeach
// stored array
@s $stored[key] = value
-@s $stored[key]
// local array
@l $local[key] = value
* New functions for arrays: $ArrayKeys($array), $ArrayValues($array),
$ArrayLength($array). These only work with arrays created with the new
syntax as shown above.
* ViRC now automatically checks for updates 5 minutes after you start it.
You can disable update checking or change settings in client setup, and
you can force it to check immediately with /checkforupdates or the
file menu item.
* New functions: $URLEncode(text), $URLDecode(text). URL encoding replaces
space with '+' and all other non-alphanumerics with '%xx', where xx is
the hex code. Decoding is the opposite.
* New function $MD5(text) to return an MD5 digest. The digest is a 128-bit
fingerprint of the input text, given as 32 hex digits. The chances of
two separate texts having the same MD5 digest are one in 2^128.
* New function $ParseColor(string [type]) to get a color's RGB value.
<string> can be an mIRC color number (0-15), a hex color in the form
$BBGGRR, a decimal color (as returned by $prop($obj.Color)), an
event color name like ecJOIN, or a color name like clGreen.
<type> can be 'dec' to return it as a decimal color (for use with
@p $obj.Color or with TextOut) or 'hex' to return it as a hex color in
the form RRGGBB (for use with \d). 'hex' is the default.
* ViRC will try to reconnect to the server if the connection is lost. You
can adjust the delay between attempts (and other settings) in client
setup. ViRC can also try other servers on the same network if enabled.
Note that disconnecting with '/raw quit' will make ViRC think the server
disconnected you, and it will try to reconnect.
* New "don't hop away" server list option. If reconnection fails on a
server with the option enabled, ViRC won't try other servers from the
same network. However, if ViRC was trying the "don't hop away" server
because reconnection failed on a different server, it will still hop
away.
* ViRC's tray icon now has a customizable popup menu (MT_TRAYPOPUP).
--- Changed features ---
* <OnStart> events are now run after the toolbars are set up and the
splash form is hidden.
* The script editor no longer saves menu items that have no code. This
means you can add items in local.lib without having to copy all the
code from virc.lib.
* The server debug log now contains all text that is sent or received.
'recv' marks a received line, 'send' is a sent line, 'send_brk' is a
sent line that is broken to avoid DCC proxies, and 'send_idle' is a
sent line that doesn't reset $idletime(). If you use debug logging, make
sure you edit any passwords out of your logs before you send them to
anyone.
* Channel, query, and DCC chat window positions are now stored with an MD5
digest of the network and channel/nickname instead of the actual plain
text. This prevents others from looking in your registry to see who
you've talked to, and also lets you have separate positions for the same
channel on different networks.
* The 'News and updates' link has been removed from the about box.
--- Fixes ---
* DCC requests are always sent correctly with reverse DCC enabled. You can
also send DCC when SOCKS is enabled, as long as reverse DCC is also
enabled.
* No more errors when using /exit with queries or channels open.
* Major DCC bugs fixed.
* Menu definitions can now have spaces before the bitmap filename.
* Fixed hexadecimal values in expressions.
* Errors in ActiveScript language blocks are handled better.
* GetVar() in ActiveScript code now works correctly for numbered parameter
variables.
* $getwindowid() now works in <OnCreateWindow> for all window types.
* Timers are now disabled correctly when the timer command takes longer
to run than the timer interval.
* Importing ViRC 1.x settings now works correctly when there was no server
list defined.
* Ending color codes now correctly clears the background color.
* Leaving the personal script filename blank is now acceptable.
Changes since ViRC 2.0pre8b:
--- Additions ---
* ViRC can now autoload more than one script at a time - a master script
(virc.lib), a personal script (local.lib), and multiple add-on scripts
(winamp.vsc, etc.). You can now install an add-on script simply by
adding it to the list on the configuration window's Scripts page and
rehashing.
* The script editor now has a "New" button, and loads the personal script
by default.
* New 'server list' button in toolbars.vsc.
* New channel list window. Try '/list *mp3*' or just '/list'. The list
can be loaded and saved to a file, using the same format as mIRC.
Right-click on a channel to get a menu.
* New /who window, accessible with /wwho or /windowedwho. Try '/wwho' to
get a list for the active channel, or '/wwho #virc' for another
channel. You can also double-click on a channel in the /list window to
see who's on.
* '/clear -h' or '/clear #virc -h' can now be used to clear the input box
history.
* The server notify list and channel nick list can now be resized by
dragging the border between the output pane and list box.
* Scripts can now create tray icons with the TTrayIcon class. Properties:
- Active: Boolean
- Hint: string
- Icon: TIcon
- PopupMenu: TPopupMenu
Events:
- OnClick
- OnDblClick
- OnRightClick ($Shift, $Button, $X, $Y)
* If you move ViRC to a new directory and it can't find the scripts (the
old paths are saved in the registry), it will look in the new location
of ViRC.exe. If it finds them there, it will load the files and update
the settings.
* Scripts can now use TListView, which is the control used in the ban
list, /who list, and Explorer windows. The actual implemented classes
are TListView, TListItem, TListItems, TListColumn, TListColumns, and
TImageList. See ovs.txt.
* Scripts can use TCanvas to draw on forms and some controls. This also
means owner-draw list boxes and list views are available.
* A color palette now appears when you start typing a color with ctrl-K.
* Attribute codes (^B, ^K, etc.) now work for the real name and default
messages settings in configuration, and for the topic in channel
control. Scripts can use TInputCombo for a combo-box that allows
attributes.
* New reverse DCC support for firewalls, compatible with mIRC. Enable
"Use reverse DCC" on the DCC settings page. Note: This won't work if
both users are behind different firewalls.
Special note to Khaled: Please put more thought into your next
invention.
* When reverse DCC is enabled, ViRC will attempt to trick some proxies
that intercept DCC requests (specifically, the one at my apartment
complex that inserts the wrong address).
* The setup wizard is now implemented. Choose "I'm new to IRC and I
want detailed help" on the import settings form for new users.
* New function: $SameNick(nick1 nick2). Considers [ the same as {,
\ the same as |, and ] the same as }, like ircd.
* New commands/functions for DCC management:
$DCCList() returns a list of DCC list entries
DCC Accept <entry> [filename]
DCC Resume <entry> <offset> [filename]
DCC Reject <entry>
$GetDCCInfo(<entry> <key>) where key is chatform (returns a mapped object
handle), chatwin (returns a window name like =1), filename, id, kind
(chat/send/tsend/get/tget), mynick, myport, nick, origfilename,
remoteaddr, remoteport, reverse, reversetoken,
server (returns the server ID), servername, socket (returns a mapped
object handle), startpos, starttime (compare to $mtime()), state
(request/connecting/connected/waiting/resuming/socks), totalsize,
transferred, or whiteboardform (returns a mapped object handle)
Note that when an incoming request is accepted, the request entry is deleted
and a new entry is created to connect. Firewall DCC entries are similarly
recreated during connection.
* New events for DCC:
<OnDCCConnect> ($0 = chat/send/tsend/get/tget, $1 = DCC entry ID)
<OnDCCFinished> ($0 = chat/send/tsend/get/tget, $1 = DCC entry ID,
$2 = socket error number, $3- = error message.
error number is 0 if completed or -1 if aborted.)
* Ident and DCC socket errors are now shown on the main status bar.
--- Changed behavior ---
* Menu bitmaps will now be made square when they're loaded, by setting
the width to be the same as the height. This means you can use the
same bitmaps for menus and toolbars if the toolbar bitmaps have
disabled versions.
* New users now have "strip attributes from logs" turned on by default.
* ViRC no longer freezes while looking up the server's IP address.
* Menu items aren't forgotten when the menu tree is updated, so you don't
have to duplicate the code for the entire menu just to add one item.
* No more AddNickToChan/RemoveNickFromChan errors.
--- Fixes ---
* The tile and cascade buttons in toolbars.vsc now work correctly.
* The tray icon refreshes itself automatically if Explorer crashes.
* The server toolbar is correctly updated after an error causes the
server to disconnect.
* The internal QUIT event now works correctly if the server doesn't send
a reason.
* The new TDCC handshake is now actually implemented.
* Continuous backgrounds work correctly with toolbars, and turning
continuous backgrounds off works as expected.
* ViRC now looks in its own directory for menu/toolbar images if no path
is given.
* Incoming messages and notices directed to the ops or voices of a channel
(@#virc, +#virc, @+#virc, etc.) are now shown in the correct window.
* Logging for nicks with \ in them works correctly.
* The ident server is now much better behaved.
* IAL expiration should be faster in large channels.
* Nicks are now compared correctly ('{' is the same as '[', etc.).
Changes since ViRC 2.0pre8:
--- Additions ---
--- Changed behavior ---
* Exceptions caused by scripts are handled differently. Functions that
raise exceptions will return an appropriate message.
* The upgrade message will now go away even if the configuration can't be
saved completely.
--- Fixes ---
* Menu bitmaps work correctly.
* Class definitions with blank lines work correctly.
* Switching between OVS-created MDI children doesn't give errors.
* Destroy/SafeDestroy no longer explicitly close forms. This will prevent
errors when a form's OnClose handler destroys the form.
* Calling methods of user-defined classes no longer loses local variables.
* List items quoted with angle brackets are now extracted correctly.
* '/dns www.yahoo.com', with an extra space after /dns, works correctly.
Changes since ViRC 2.0pre7:
--- Additions ---
* RGB color codes are now supported, a la Bersirc. Press ^L (or use \d
in a script), followed by a RRGGBB hex color code (like HTML). A comma
separates the foreground and background colors.
* ViRC can now be set to recognize ^V as inverse colors instead of italics.
It will always recognize ^R as inverse, and now also always recognizes ^]
($char(29) or \s) as italics. Pressing control-N or control-R will insert
the correct italics or reverse code whether compatibility mode is on or off.
New users will default to new color mode, existing users will default to
compatibility mode.
* New text window options: "old italic compatibility mode" and "script link
merge mode".
* New versions of a few string functions to allow tokens/substrings with
spaces (just quote the token as a list item): $StrPosEx(), $StrPosFromEx(),
$StrTokLEx(), $StrTokREx(), $RStrPosEx(), $RStrTokLEx(), $RStrTokREx().
* New versions of pattern matching functions to allow patterns with spaces
(quote the *text* as a list item): $WildMatchEx(), $WildMatchCaseEx(),
$GlobMatchEx(), $GlobMatchCaseEx().
* Ctrl-enter can be used to type multiple lines in the input box and send
them all at once.
* The script editor gives a warning when it loads a file where code between
aliases/events/menus will be lost.
* /wallops has been added as a built-in command.
* New variable $exebuild to return the build number of ViRC.exe. This can
be found by opening ViRC.exe's properties and looking at the version page;
if $build is 200 and $exebuild is 42, the file version will be 2.0.0.42.
* New command: Inflate [window]. This makes the window as big as possible
without maximizing it, so switching windows will be faster. If no window
name is given, all windows will be inflated. Clicking a window's maximize
button will now inflate it instead of maximizing (turn off "maximize button
inflates" to go back).
* New function $ListCat(<item1> .. <itemN>) to append list items. This will
be faster than appending them as strings when the new script engine is in.
* Screen information can now be retrieved by mapping !Screen: see the
properties ActiveControl, ActiveForm, DesktopHeight, DesktopLeft,
DesktopTop, DesktopWidth, Height, Width, HintFont, IconFont, MenuFont,
and PixelsPerInch.
* ViRC will strip out the PGP headers when loading a script that has been
digitally signed with PGP. It will not verify the signature itself, though.
If you sign a script, make sure to keep the original script text intact -
you can do this by opening it in a text editor and signing it with PGPtray,
*not* by using the PGP right-click menu in Explorer. Make sure you have
"word wrap clear-signed messages" turned off in PGP's email options.
* DCC Whiteboard is back, and much more powerful. See vircwb.txt for details
on how to control the whiteboard from scripts. This whiteboard is
compatible with ViRC 1.x's whiteboard, but some features will be unavailable
(the 1.x user may see "CAN use-wb2" as ViRC 2 tries to negotiate this).
* New commands/functions to interact with other windows:
$FindWindow("class" ["title"]), $SendMessage(<hwnd> <msg> <wparam> <lparam>),
$GetWindowText(<hwnd>), SetWindowText <hwnd> <text>.
* New commands/functions to allocate and edit memory, intended for use with
SendMessage or DLLs (ViRC may crash if you don't know what you're doing):
$GetMem(size), FreeMem <ptr>, PokeLong <ptr> <offset> <value>, and
$PeekLong(<ptr> <offset>). PokeWord, PokeByte, PeekWord, and PeekByte are
also available, and PokeString/PeekString can be used for C-style strings.
* New persistent DLL support with $LoadDLL(<filename>), FreeDLL <filename>,
and an extended $DLL(). See vircdll.txt for details, or fpu.dpr for an
example. Note to DLL authors: although you can have mIRC-style functions
and persistent functions with the same name in the same DLL, persistent
calls use different function names and parameter types.
* Built-in timestamping for text windows. Turn on the "show timestamps"
option to see them by default, or right-click in a window to turn it on
and off. Timestamps are saved even when timestamping is turned off, and
toggling timestamp display affects lines that have already been added,
as in AIM.
* The script editor now has syntax hiliting and auto-indent.
* Custom toolbar support, using Toolbar..EndToolbar blocks (similar to menu
trees). See toolbars.vsc.
* virc.lib now includes responses for CTCP USERINFO, FINGER, SOURCE, and
CLIENTINFO, and an /sv command to brag about your client version.
* These server form properties can now be used in scripts: Hostname,
Nick, Ident, IRCName, Servername (read only), Port (read only), Connected
(read only), ConnectedAt (read only), LastSent (read only). These channel
form properties can also be used: ServerID (read only), Server (TForm),
Channel, JoinString (read only), Mode, Key (read only), Limit (read only),
Topic, TopicSetter, TopicTime, TopicHistory (TStringList).
* Menu tree definitions can now contain an optional bitmap filename,
surrounded by double-quotes before the caption.
--- Changed behavior ---
* The mouse wheel code has been changed. If your wheel hasn't been working
properly (*cough* Gnowknaym), try turning off the "Mouse wheel fix" option.
* 'Nop' event handlers in OVS now work the same way as they did in 1.x; that
is, it sets a handler that does nothing. To actually unset an event handler
(as 'Nop' did in pre7), use 'Nil' instead.
* $ListReplace() now creates empty items in between:
$ListReplace(2 2 foo a b c) => a b foo
$ListReplace(2 2 foo a) => a "" foo
* /kb now deops the victim.
* Internal socket error handling has changed.
* The configuration window now appears the first time running ViRC.
* <OnConnect> events now get the server name in $0 and the network name in $1.
$1 will be () if there is no matching network.
* TDCC now works with a parameter at the end of CTCP DCC SEND, instead of
using CTCP DCC TSEND. This means that if you TDCC send to an mIRC user, it
will go through as regular DCC (with send-ahead) instead of being ignored.
Turn on "use old TDCC handshake" to go back.
* Tab characters are no longer copied to the clipboard.
* 'true' and 'false' can be used in expressions to mean 1 and 0 respectively.
Among other things, this means you can do 'if $prop($checkbox.Checked)'.
* A default value can be specified to AddScriptControl:
AddScriptControl config edit "Auto join:" autojoin = #virc
* Commands sent in the background by ViRC (such as ISON commands for the
notify list) will no longer reset $idletime(). Use 'Quote -idle <text>' or
'Raw -idle <text>' to do this from scripts.
* Existing aliases, events, and toolbars will now be removed from memory
before rehashing the script (with /rehash or the script editor).
* Aliases are now stored in a hash table rather than a slow sequential list.
--- Fixes ---
* Focus for newly created windows is now correct again.
* Clicking empty spots on the tab bar no longer causes it to grow. Closing
the first window no longer leaves an extra separator.
* The script editor's "this script loads" list no longer includes
files that don't exist.
* "%%" and "*%" in patterns will now work as expected.
* Deleting items in the script editor doesn't break the last item.
* Rearranged virc.lib again, it's now completely safe to edit from ViRC.
* TextOutBitmap -nohilite works correctly.
* Variables can now contain $char(0).
* <OnDCCRequest> event handling is improved.
* Hexadecimal values ($$a40c) work in expressions again.
* Text windows no longer scroll to the bottom when they are resized.
* The tab bar no longer appears when it's empty.
* Menu items now run in the correct channel.
Changes since ViRC 2.0pre6:
* New window tab bar. This one docks at all four sides, puts all the
tabs on one bar, and automatically updates the tab icons if a script
changes a form's icon (not just for TTabbedForm).
* New options: "no separators on window tab bar", "hide window tab bar",
"automatically show DCC list" (for incoming or outgoing requests).
* A channel control dialog is in. Use /ChannelControl [channel] or double-
click in the channel window. It can be mapped as !ChannelControl.
* New command: /exec <program> <parameters>.
* The script editor no longer loses <DoubleClick> menu items. It's also
stay-on-top instead of modal, and it will go back to the same file
and item when it's closed and reopened. It can be mapped as
!ScriptEditor.
* /dde is fixed and can now poke data as well as reading and executing.
* ViRC now has a DDE server. See vircdde.txt.
* If ViRC can't load the default script, it will bring up the config form
so the script path can be corrected, then quit.
* $isdccchatting() now accepts a leading equal sign (=1 or =Atrox).
* Only the most specific <OnNewDCCChatText> event will be fired, unless
FallThrough is used. Use 'FireEvent -one' to fire your own events
this way.
* Text scroller fixes: gaps between bold and non-bold text are gone,
^R now correctly draws the background color.
* The help menu has descriptions for the included files, and the
scripting help files are on a submenu.
* /^ no longer causes text display to be stuck off.
* Script engine fix: an OVS event handler that sets a new handler for
the same event on the same object will no longer cause access violations.
* TInputMemo is now available in OVS - it's like TMemo but it handles
attribute keys (^B, ^K, etc) and attribute pasting. TForm's OnClose event
is also supported. Set $Action to caNone, caHide, caFree, or caMinimize.
* The DCC list's position is saved and loaded correctly.
* New properties for channel windows: TopicSetter (string), TopicTime
(unixtime), and TopicHistory (TStringList).
* New method for TMonkeySex: GetText(). Returns all the text in the control.
* ViRC.lib has been rearranged so that the script editor won't lose the
active nicks/modes code.
* New function: $UnixTimeOf(dd/mm/yy hh:mm[:ss] [am/pm])
* $DecodeInterval() and $DecodeMInterval() now accept a second parameter, a
format string containing characters w, d, h, m, s. The default format is
'dhms'. Lowercase characters are optional fields, uppercase characters
are required fields.
$decodeinterval(123 hms) => 2 minutes 3 seconds
$decodeinterval(123 HMS) => 0 hours 2 minutes 3 seconds
$decodeinterval(123 hm) => 2 minutes
$decodeinterval(123 h) => 0 hours
* The controls on server/channel/query/chat forms are now in their own
panels (OutputPanel, InputPanel, NotifyPanel, NickListPanel). This should
make it easier to fit new controls in.
Changes since ViRC 2.0pre5:
* VSInterp fixes: '@p $obj.Items.CommaText' wouldn't work, even though
the property could be retrieved. RemoveFromSetProp was broken.
* New functions: $getmode(), $gettopic(), $getkey(), $getlimit().
* New "keep channels open when dropped" option.
* New script editor. Right-click on the tree to add or delete items.
Remember that ViRC 2 load scripts from a file, not the registry - the
editor works on files, not a "working copy" of the script as in 1.x.
The header and footer appear before and after the script in the file,
respectively; don't define aliases, events, or menus in the header or
footer. The editor will load any ViRC script file, but if you load a
file that wasn't created with the editor, you'll lose everything that
appears between definitions (comments before events, etc.). Comments
should be put in the header/footer or inside definitions.
* Friendlier welcome/"import settings" dialog.
* /load will now default to looking in the ViRC directory if no path is
given.
* The following built-in commands no longer display text: /say, /msg,
/notice, /ctcp, /rctcp, /me, /desc. Instead, they fire script events:
<OnMyChanText>, <OnMyPrivMsg>, <OnMyNotice>, <OnMyCTCP>, <OnMyRCTCP>,
<OnMyChanAction>, <OnMyPrivAction>, <OnMyQueryText>, <OnMyQueryAction>.
$0 is the target or window, $1- is the text. The events will be fired
even if the text display is suppressed with the ^ prefix. DCC chat uses
the same events as queries (this is the only time $N can be used on the
global interpreter). $C is set to the target for channel and query events,
and the active window for the others.
Changes since ViRC 2.0pre4:
* New "continuous backgrounds" option. This causes each window's background
image to be tiled from the same starting point.
* A wallpaper image can now be displayed behind the child windows. Combine
this with continuous backgrounds for an interesting effect.
* Numeric operators are now left-associative, like they should be: $(1-2+3)
returns 2 ((1-2)+3), instead of -4 (1-(2+3)).
* $notify() no longer displays text in the active window when used as a
function.
* The mouse wheel should now work again. Moving the wheel over the nick list
will scroll the list; moving it anywhere else will scroll the output pane.
* Channel window titles are now only set to the first 100 characters of the
caption. This should prevent access violations in channels with very long
topics.
* New DCC options: "Force DCC IP address" and "force port range" (for
incoming connections only). This is useful if you're behind a firewall or
NAT (aka Internet Connection Sharing). The IP address will be evaluated
if specified, so you can point it to a file on your NAT server:
$readline(1 $noattribs(\\win2kbox\c\currentip.txt))
* Instead of /command, you can now also type //command (to evaluate it
first) or ///text (to evaluate some text and show it in a message box).
* /DNS will now accept a nick. If you have a hostname that looks like a
nickname (no dots, doesn't start with a number), use /dns *host to
prevent this.
* New TSockets method: SListenRange(lowport highport). Attempts to listen
on any port within the range, returning the port if successful, or 0
if not.
* New "auto connect to servers" script setting. Set this to a
comma-separated list of servers to connect to when you open the client.
* Updated script documentation is included.
Changes since ViRC 2.0pre3:
* Logging paths containing \b, \i, \u, etc. will now work correctly.
* OnServer works on server 16.
* Text scroller updates:
- Multiple lines of text are copied to the clipboard correctly.
Attributes are also terminated at the end of the selection.
- TextOut bitmaps are drawn transparently. Any pixels that are the same
color as the bottom-left corner will be transparent.
- Background images are available again.
- A lock icon is now displayed in the bottom-right corner when a window is
scrolled up, indicating that new lines will not be visible as they are
added.
* DLL calls are now supported. Use '/dll foo.dll funcname data' or
$dll(foo.dll funcname data), surrounding the filename with quotes if
necessary. The same format as mIRC's DLLs is used:
type
TDLLCall = function (Main, Active: HWND; Data, Params: PChar; Show,
NoPause: BOOL): Integer stdcall;
The Params buffer is initialized to "ViRC 200", where 200 is the current
ViRC build. A return code of 0 (halt script) is treated the same as 1
(continue script).
* The script log form can be mapped as !ScriptLog, when enabled.
* New function: $striplinks(). This only strips hyperlinks and script links;
$stripattrs() does neither.
* Links are now correctly stripped from logs.
* Built-in timers:
/timer [timername] seconds repeats command
/mtimer [timername] millisecs repeats command
/timers ['all']
/untimer timername
$timerexists(timername)
$timerlist([serverid])
$gettimer(timername) => millisecs repeats server command
A "repeats" value of 0 means the timer repeats forever. Timer names are
shared across all servers, and any timers created on a server are deleted
when that server is closed. Timer names may not start with a digit. If the
timer name is omitted in /timer or /mtimer, an available name will be
generated automatically. $timer() and $mtimer() can be used as functions,
which will return the name of the newly created timer. Commands will not be
evaluated when they are run (if you want it to happen, use Eval).
Changes since ViRC 2.0pre2:
* Script link colors are now averaged correctly.
* 'TextOut -nohilite' (or TextOutBitmap -nohilite) can be used to prevent
the window tabs from lighting up.
* 'DNS hostname' now correctly performs the reverse lookup instead of just
repeating the hostname you supplied, and only shows it if the result of
the reverse lookup is different from the supplied hostname.
* Part messages are now handled correctly. This may eliminate AddNickToChan
errors.
* \L and \S are now stripped from logs when attribute stripping is turned on.
* A splash screen is now displayed as ViRC starts.
* #172 is now handled correctly in patterns, as is % followed by * or #172.
* Punctuation is now stripped from the end of URLs more reliably.
* Variables removed by mask (with '-@ $foo.*' or when local variables are
removed) are now matched case-sensitively. This is available to scripts as
$wildmatchcase().
* $new() now works correctly if there is more than one space between 'ownedby'
or 'position' and its argument.
* The Active, ActiveMDIChild, FormState, ModalResult, and TileMode properties
of TForm are now available.
* Destroying an object from one of its event handlers will now work in *some*
cases. Which ones work is dependent on the internals of Windows and the VCL.
The command 'SafeDestroy' has been added which will always work, but won't
actually destroy the object until the event handlers finish running.
* $mapobject(#virc:WindowTab) can now be used to find the button on the tab
bar corresponding to a given window.
* $globmatch() and $globmatchcase() are now available, which only use '*' and
'?' as wildcards. $maskmatch() is the same as $globmatch().
* New DCC config options: send ahead and block size.
Changes since ViRC 2.0pre1:
* TextOut on the global interpreter will now display to the active window.
* $?="" now returns INPUT_CANCELLED if the user presses Cancel.
* ViRC will no longer attempt to send data to the server from an
<OnDisconnect> event.
* <OnCreateWindow> will now be fired with "TDCCChatForm =nick =1" for DCC
chat forms (with the appropriate =ID in $2).
* New functions to get the nicks involved in a DCC chat: $LocalNick(=ID),
$RemoteNick(=ID).
* Objects created with OVS are no longer freed by the interpreter when it is
destroyed - this fixes access violations, 100% CPU usage, and so on when
closing ViRC.
* Some more 1.x settings are now imported as script settings.
* Kick/KB messages and exit/X messages are now evaluated as in 1.x.
* New function: $IsA(<obj> <class>).
* RPL_UMODEIS events with a colon before the user mode are now handled
correctly.
* Script link aliases now get $X, $Y, $Shift, and $Button, just like
OnMouseDown handlers. They also get $Text (the visible text of the link)
and $ScreenX and $ScreenY (the screen coordinates of the mouse click,
suitable for use with TPopupMenu.Popup).
* A form can now be destroyed from one of its event handlers. However, other
controls should not be.
* $UnixTime() is back to using 32-bit numbers. This prevents uncommon but
bizarre flaws with the 64-bit numbers, such as all unixtimes being off by
136 years.
* Server list changes: New server entries are now saved correctly the first
time. You can now choose which servers and networks to export/import.
Importing is now implemented.
* The join and part bitmaps have been changed to a white arrow on a red
background, which should be easier on the eyes.
* Object handles are now shared between interpreters.
* New method: TMenu.LoadFromMenuTree. This creates menu items to match the
menu tree, and puts their handles in the local _item array; for example,
an item named M_CTCPVERSION will be created with its handle in
$_item.M_CTCPVERSION. Note that OnClick handlers are not set up for these
items.. clicking them will not make anything happen by default.
* MenuTree..EndMenuTree can now be used to define custom menu trees by giving
a non-standard name. They will not be used by ViRC and cannot be used with
MenuItem..EndMenuItem; they are intended for use as shown above.
* AppendText now creates the file if it doesn't already exist.
* New commands: ShowScriptLog,
FireMenuItem [> channel] <item> on <tree> [= parameters].
* Ident requests are now answered with a CRLF at the end, which should make
ident work with more servers.
* The main menu no longer forgets all the hints and items when the menu tree
is changed.
* $prebuild can now be used to find the current prerelease version.
* TMonkeySex's events can now be set:
OnClick, OnDblClick: gets $Sender
OnCopyText, OnHyperlink, OnLogging: gets $Sender and $Text
OnScriptLink: gets $Sender, $Command, $Text, $Button, $Shift, $X, $Y
* The default script link color has been changed. Script links are now
displayed using the average between the regular text color and the script
link color.
* ViRC.lib now generates script links, which you can turn on and off with the
checkboxes on the script settings tab. "Active nicks" brings up the nick
list popup when you right-click a nick, "Active hosts" runs a DNS lookup
on a hostname when you double-click it, "Active modes" lets you undo a mode
change by right-clicking it, and "Active invites" lets you join a channel
when you're invited by double-clicking it.
* Hyperlinks and script links are now stripped before a TextOut to a
TRichEdit.
* Magic is now properly applied to channel nick list popups.
Changes since ViRC 2.0pre-1:
* Event masks like "% FOO" will now match either "xyz FOO" or "xyz FOO bar",
but not "xyz FOOABC"; that is, the line from the server can contain extra
words at the end that aren't in the mask. $wildmatch() still works as usual.
You can get the same effect from $wildmatch() by putting an alt-0172 at the
end of your pattern.
* $currentserver_activewindow() is now an alias for $activewindow().
* TTrackBar and TNashButton are now available for scripts to use.
* New commands: FlushIAL, SetInputLine.
* New functions: $GetInputLine(), $MapProp().
* New syntax to uncache one bitmap: FlushBitmapCache <filename>
* ViRC 1.x user/server lists are now imported.
* New "timestamp logs" option.
* The version info on virc.exe is fixed.
* The script log window can now be resized, and right-clicking on it will let
you change the buffer size.